package com.lpit.crawler;

import com.lpit.CrawlerProxy;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpHost;
import org.openqa.selenium.Proxy;

public class CrawlerProxyFactory {

    /*用于表示不使用代理的情况*/
    public final static String NOT_USE_PROXY = "NOT_USE_PROXY";

    /*用于在Selenium中使用的代理对象*/
    public static Proxy getSeleniumProxy(CrawlerProxy crawlerProxy) {
        if (null != crawlerProxy && StringUtils.isNotEmpty(crawlerProxy.getHost()) && null != crawlerProxy.getPort()) {
            Proxy proxy = new Proxy();
            /*通过crawlerProxy对象的主机和端口属性设置proxy对象的HTTP代理属性*/
            proxy.setHttpProxy(crawlerProxy.getHost() + ":" + crawlerProxy.getPort());
            return proxy;
        }
        return null;
    }

    /*用于在Apache HttpClient中使用的代理对象*/
    public static HttpHost getHttpHostProxy(CrawlerProxy crawlerProxy) {
        if (null != crawlerProxy && StringUtils.isNotEmpty(crawlerProxy.getHost()) && null != crawlerProxy.getPort()) {
            /*使用crawlerProxy对象的主机和端口属性创建一个HttpHost对象，并直接返回该对象*/
            return new HttpHost(crawlerProxy.getHost(), crawlerProxy.getPort());
        }
        return null;
    }

    /*用于在WebMagic爬虫框架中使用的代理对象*/
    public static us.codecraft.webmagic.proxy.Proxy getWebmagicProxy(CrawlerProxy crawlerProxy) {
        if (null != crawlerProxy && StringUtils.isNotEmpty(crawlerProxy.getHost()) && null != crawlerProxy.getPort()) {
            /*使用crawlerProxy对象的主机和端口属性创建一个us.codecraft.webmagic.proxy.Proxy对象设置端口跟IP并返回*/
            return new us.codecraft.webmagic.proxy.Proxy(crawlerProxy.getHost(), crawlerProxy.getPort());
        }
        return null;
    }

    /*该方法用于获取代理的信息字符串。根据提供的代理主机和端口返回一个由主机和端口组成的字符串*/
    public static String getCrawlerProxyInfo(CrawlerProxy crawlerProxy) {
        if (null != crawlerProxy) {
            return crawlerProxy.getHost() + ":" + crawlerProxy.getPort();
        }
        return NOT_USE_PROXY;
    }


}
